package com.ywt.cda.utils;

import java.math.BigDecimal;

/**
 * Created by feng on 2016/3/23.
 */
public class NumberUtil {

    public static double add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }


    public static  double sub(double v1,double v2){

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        return b1.subtract(b2).doubleValue();

    }


    public static  double div(double v1,double v2,int scale){

        BigDecimal b1 = new BigDecimal(Double.toString(v1));

        BigDecimal b2 = new BigDecimal(Double.toString(v2));

        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    public static Double mul(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }

    /**

     * 提供精确的小数位四舍五入处理。

     * @param v 需要四舍五入的数字

     * @param scale 小数点后保留几位

     * @return 四舍五入后的结果

     */

    public static double round(double v, int scale) {

        if (scale < 0) {

            throw new IllegalArgumentException("The scale must be a positive integer or zero");

        }

        BigDecimal b = new BigDecimal(Double.toString(v));

        BigDecimal one = new BigDecimal("1");

        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

    }


    /**
     * 返回数组最大值索引
     * @param arr
     * @return
     */
    public static int[] searchMaxWithIndex(Long[] arr)
    {
        int[] pos = new int[arr.length];  //记录最大值所在位置的数组

        int position = 0; //初始设定数组的第1个元素为最大值

        int j = 1;//j指示位置数组pos的下标

        for (int i = 1; i < arr.length; i++)
        {
            if (arr[i] > arr[position])
            {
                position = i; //记下新的最大值的位置
                j = 1; //位置数组pos的下标恢复为1，下标为0的位置为position预留
            }
            else if (arr[i] == arr[position])
                pos[j++] = i; //记下重复最大值的位置
        }

        pos[0] = position;  //位置数组pos的下标为0的位置为position预留

        if (j < arr.length) pos[j] = -1; //-1为标识值，表示位置数组pos下标为0, 1, 2…(j-1)的位置存放的是最大值所在的位置

        return pos;
    }

}
